C++ String
⋮
A string in C++ is a collection of characters that are used to represent text. There are two main approaches to dealing with it:
C style (char arrays)C++ (std::string)
Compared to C-style strings, C++ strings, which are specified in the Standard Template Library (STL), are more flexible and simpler to use. They are safe to use, offer a variety of built-in string manipulation capabilities, and enable dynamic memory management.
. C-style Strings
C-style strings are simple arrays of characters terminated by a null character (\0).
Example:
#include <iostream>
#include <cstring> // For C-style string functions
using namespace std;
int main() {
char str1[] = "Hello"; // Declare and initialize
char str2[20]; // Declare with size
// Copy and concatenate
strcpy(str2, str1); // str2 becomes "Hello"
strcat(str2, " World!"); // str2 becomes "Hello World!"
cout << "C-style String: " << str2 << endl;
// String length
cout << "Length: " << strlen(str2) << endl;
return 0;
}
Essential Roles:
strlen(): Determines the string's length.
One string can be copied into another using strcpy().
Two strings are concatenated using strcat().
strcmp(): Performs a string comparison.
Restrictions:
fixed size (established at the time of declaration).
Memory management must be done by hand.
prone to mistakes (for example, unable to remember the null character).
2. C++ Strings (std::string)
C++'s std::string class offers a dynamic, high-level, and secure substitute for C-style strings. Concatenation, comparison, substring extraction, and other operations are supported by this function, which is defined in the <string> header.
Declaration and Initialization
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Hello"; // Initialization
string str2("World!"); // Another way to initialize
string str3 = str1 + " " + str2; // Concatenation
cout << str3 << endl; // Output: Hello World!
return 0;
}
Common String Operations
Length of a String
Use .length() or .size() to find the number of characters in the string.
string str = "Hello";
cout << "Length: " << str.length() << endl; // Output: 5
Accessing Characters
Use array-style indexing ([]) or .at()
string str = "Hello";
cout << str[0] << endl; // Output: H
cout << str.at(1) << endl; // Output: e
Concatenation
Use + or .append() to combine strings.
string str1 = "Hello";
string str2 = " World!";
string result = str1 + str2;
cout << result << endl; // Output: Hello World!
Substring Extraction
Use .substr(position, length) to extract part of the string.
string str = "Hello World!";
string sub = str.substr(6, 5); // Extract "World" starting at index 6
cout << sub << endl; // Output: World
Finding Substrings
Use .find() to locate a substring or character.
string str = "Hello World!";
size_t pos = str.find("World");
if (pos != string::npos) {
cout << "Found at index: " << pos << endl; // Output: Found at index: 6
}
Replace
Use .replace(startIndex, length, newString) to modify part of a string.
string str = "Hello World!";
str.replace(6, 5, "C++");
cout << str << endl; // Output: Hello C++!
Erasing Characters
Use .erase(startIndex, length) to remove part of a string.
string str = "Hello World!";
str.erase(5, 6); // Removes " World"
cout << str << endl; // Output: Hello!
Comparison
Use comparison operators (==, <, >) or .compare()
string str1 = "Hello";
string str2 = "World";
if (str1 < str2)
cout << str1 << " comes before " << str2 << endl;
Iterating Through a String
Use a range-based for loop.
string str = "Hello";
for (char c : str) {
cout << c << " ";
}
// Output: H e l l o
Example Program: C++ String Features:
#include <iostream>
#include <string>
using namespace std;
int main() {
string str1 = "Hello";
string str2 = "C++";
// Concatenate strings
string result = str1 + " " + str2;
cout << "Concatenated string: " << result << endl;
// Find and replace
size_t pos = result.find("C++");
if (pos != string::npos) {
result.replace(pos, 3, "World");
}
cout << "After replacement: " << result << endl;
// Substring extraction
string sub = result.substr(6, 5);
cout << "Substring: " << sub << endl;
// Erase part of the string
result.erase(5, 6);
cout << "After erase: " << result << endl;
return 0;
}
Advantages of std::string Over C-style Strings
| Feature | C-style Strings | std::string |
|---|---|---|
| Memory Management | Manual (programmer handles it) | Automatic |
| Ease of Use | Limited functions | Rich built-in methods |
| Safety | Prone to buffer overflows | Exception-safe, dynamic |
| Dynamic Size | Fixed size | Automatically resizable |
What Should I Use When?
For practically all situations, use std::string. It's more adaptable, simpler, and safer.
When working with legacy C code or for embedded systems with limited memory, use C-style strings.
You may take use of the ease and power of contemporary C++ by utilizing std::string!
Comments